;
(function($) {
	var PerformanceTool = function() {
	};

	var summaryLineOpts = {
		title : {
			text : 'CPU, MEM, JVM usage(%)' 
		},
		tooltip : {
			formatter : "{b}<br/>" + "{a0}:{c0}%<br/>" + "{a1}:{c1}%<br/>"
					+ "{a2}:{c2}% ",
			show : true,
			trigger : 'axis'
		},
		toolbox : {
			show : true,
			feature : {
				mark : {
					show : true
				},
				dataView : {
					show : true,
					readOnly : false
				},
				magicType : {
					show : true,
					type : [ 'line', 'bar' ]
				},
				restore : {
					show : true
				},
				saveAsImage : {
					show : true
				},
				dataZoom : {
					show : true
				}
			}
		},
		dataZoom : {
			show : true,
			realtime : true
		},
		legend : {
			data : [ 'CPUUSED', 'MEMERYUSED', 'JVMHEAPUSED' ]
		},
		xAxis : [ {
			type : 'category',
			data : []
		} ],
		yAxis : [ {
			type : 'value',
			axisLabel : {
				formatter : '{value} %'
			}
		} ],
		series : [ {
			"name" : "CPUUSED",
			"type" : "line",
			"data" : [],
			markPoint : {
				data : [ {
					type : 'max',
					name : 'max'
				}, {
					type : 'min',
					name : 'min'
				} ]
			},
			markLine : {
				data : [ {
					type : 'average',
					name : 'average'
				} ]
			}
		}, {
			"name" : "MEMERYUSED",
			"type" : "line",
			"data" : [],
			markPoint : {
				data : [ {
					type : 'max',
					name : 'max'
				}, {
					type : 'min',
					name : 'min'
				} ]
			},
			markLine : {
				data : [ {
					type : 'average',
					name : 'average'
				} ]
			}
		}, {
			"name" : "JVMHEAPUSED",
			"type" : "line",
			"data" : [],
			markPoint : {
				data : [ {
					type : 'max',
					name : 'max'
				}, {
					type : 'min',
					name : 'min'
				} ]
			},
			markLine : {
				data : [ {
					type : 'average',
					name : 'average'
				} ]
			}
		} ]
	}

	var queueLineOpts = {
		title : {
			text : 'Queue Size'
		// , subtext: '%'
		},
		tooltip : {
			trigger : 'item',
			//formatter : "{b}<br/>" + "{a}:{c}<br/>",
			formatter : function(params) {
				var res = "";
				res += "";
				var d = (new Date(parseInt(params.value[0])));
				var resd = "Time ";
				resd += d.getHours() + ":";
				resd += d.getMinutes() + ":";
				resd += d.getSeconds();
				res += resd + "<br/>Size " + params.value[1];
				return res;
			},
			show : true
		},
		toolbox : {
			show : true,
			feature : {
				mark : {
					show : true
				},
				dataView : {
					show : true,
					readOnly : false
				},
				magicType : {
					show : true,
					type : [ 'line', 'bar' ]
				},
				restore : {
					show : true
				},
				saveAsImage : {
					show : true
				},
				dataZoom : {
					show : true
				}
			}
		},
		dataZoom : {
			show : true,
			realtime : true
		},
		legend : {
			data : [ 'QUEUESIZE' ]
		},
		xAxis : [ {
			type : 'value',
			scale : true,
			axisLabel : {
				formatter : function(value) {
					var d = (new Date(value));
					var res = "";
					// res += d.getFullYear()+"/";
					// res += d.getMonth()+1 +"/";
					// res += d.getDate()+" ";
					res += d.getHours() + ":";
					res += d.getMinutes() + ":"
					res += d.getSeconds();
					return res;
				}// '{value}'
			},
			splitNumber : 20
		} ],
		yAxis : [ {
			type : 'value',
			scale : true,
			axisLabel : {
				formatter : '{value}'
			}
		} ],
		series : [ {
			"name" : "QUEUESIZE",
			"type" : "line",// "scatter",
			"data" : [],
			symbolSize : 1,
			showAllSymbol : true
			,
			markPoint : {
				symbolSize:2,
				
				data : [ {
					type : 'max',
					name : 'max'
				}, {
					type : 'min',
					name : 'min'
				} ]
			}
			/*,
			markLine : {
				data : [ {
					type : 'average',
					name : 'average'
				} ]
			}*/
		} ]
	}

	var heapOption = {
		title : {
			text : 'Heap memery used and committed (MB)'
		// , subtext: '%'
		},
		tooltip : {
			formatter : "{b}<br/>" + "{a0}:{c0}MB<br/>" + "{a1}:{c1}MB",
			show : true,
			trigger : 'axis'
		},
		toolbox : {
			show : true,
			feature : {
				mark : {
					show : true
				},
				dataView : {
					show : true,
					readOnly : false
				},
				magicType : {
					show : true,
					type : [ 'line', 'bar' ]
				},
				restore : {
					show : true
				},
				saveAsImage : {
					show : true
				},
				dataZoom : {
					show : true
				}
			}
		},
		dataZoom : {
			show : true,
			realtime : true
		},
		legend : {
			data : [ 'HEAPUSED', 'HEAPCOMMITTED' ]
		},
		xAxis : [ {
			type : 'category',
			data : []
		} ],
		yAxis : [ {
			type : 'value',
			axisLabel : {
				formatter : '{value} MB'
			}
		} ],
		series : [ {
			"name" : "HEAPUSED",
			"type" : "line",
			"data" : [],
			markPoint : {
				data : [ {
					type : 'max',
					name : 'max'
				}, {
					type : 'min',
					name : 'min'
				} ]
			},
			markLine : {
				data : [ {
					type : 'average',
					name : 'average'
				} ]
			}
		}, {
			"name" : "HEAPCOMMITTED",
			"type" : "line",
			"data" : [],
			markPoint : {
				data : [ {
					type : 'max',
					name : 'max'
				}, {
					type : 'min',
					name : 'min'
				} ]
			},
			markLine : {
				data : [ {
					type : 'average',
					name : 'average'
				} ]
			}
		} ]
	};

	var panelOption = {
		tooltip : {
			formatter : "{c}%",
		},
		toolbox : {
			show : true,
			feature : {
				saveAsImage : {
					show : true
				}
			}
		},
		series : [
				{
					name : 'CPU',
					type : 'gauge',
					// center : ['25%', '55%'], // 默认全局居中
					z : 3,
					min : 0,
					max : 100,
					splitNumber : 10,
					axisLine : { // 坐标轴线，默认显示 或者一边盘的刻度之类的
						show : true, // 显示与否
						lineStyle : { // 属性lineStyle控制线条样式
							color : [ [ 0.2, '#228b22' ], [ 0.8, '#48b' ],
									[ 1, '#ff4500' ] ],
							width : 8
						}
					},
					axisTick : { // 坐标轴小标记
						splitNumber : 10, // 每份split细分多少段
						length : 12, // 属性length控制线长
						lineStyle : { // 属性lineStyle控制线条样式
							color : 'auto'
						}
					},
					splitLine : { // 分隔线
						show : true, // 默认显示，属性show控制显示与否
						length : 20, // 属性length控制线长
						lineStyle : { // 属性lineStyle（详见lineStyle）控制线条样式
							color : 'auto'
						}
					},
					pointer : { // 指针
						width : 5, // 属性length控制线长，百分比相对的是仪表盘的外半径
						length : '80%', // 属性width控制指针最宽处
						color : 'auto' // 属性color控制指针颜色
					},
					title : {
						show : true,
						offsetCenter : [ 0, '-40%' ], // 属性offsetCenter用于标题定位，数组为横纵相对仪表盘圆心坐标偏移，支持百分比（相对外半径），
						textStyle : { // 其余属性默认使用全局文本样式，详见TEXTSTYLE
							fontWeight : 'bolder',
							fontSize : 20,
							fontStyle : 'italic'
						}
					},
					detail : {
						textStyle : { // 其余属性默认使用全局文本样式，详见TEXTSTYLE
							fontWeight : 'bolder'
						}
					},
					data : [ {
						value : 40,
						name : 'CPU(%)'
					} ]
				}, {
					name : 'Memery',
					type : 'gauge',
					center : [ '25%', '55%' ], // 默认全局居中
					// radius : '50%',
					min : 0,
					max : 100,
					// endAngle:45,
					splitNumber : 10,
					axisLine : { // 坐标轴线
						lineStyle : { // 属性lineStyle控制线条样式
							width : 8
						}
					},
					axisTick : { // 坐标轴小标记
						length : 12, // 属性length控制线长
						lineStyle : { // 属性lineStyle控制线条样式
							color : 'auto'
						}
					},
					splitLine : { // 分隔线
						length : 20, // 属性length控制线长
						lineStyle : { // 属性lineStyle（详见lineStyle）控制线条样式
							color : 'auto'
						}
					},
					pointer : {
						width : 5
					},
					title : {
						show : true,
						offsetCenter : [ 0, '-30%' ], // 属性offsetCenter用于标题定位，数组为横纵相对仪表盘圆心坐标偏移，支持百分比（相对外半径），
						textStyle : { // 其余属性默认使用全局文本样式，详见TEXTSTYLE
							fontWeight : 'bolder',
							fontSize : 20,
							fontStyle : 'italic'
						}
					},
					detail : {
						textStyle : { // 其余属性默认使用全局文本样式，详见TEXTSTYLE
							fontWeight : 'bolder'
						}
					},
					data : [ {
						value : 1.5,
						name : 'MEM(%)'
					} ]
				}, {
					name : 'JVM',
					type : 'gauge',
					center : [ '75%', '55%' ], // 默认全局居中
					// radius : '50%',
					min : 0,
					max : 100,
					// endAngle:45,
					splitNumber : 10,
					axisLine : { // 坐标轴线
						lineStyle : { // 属性lineStyle控制线条样式
							width : 8
						}
					},
					axisTick : { // 坐标轴小标记
						length : 12, // 属性length控制线长
						lineStyle : { // 属性lineStyle控制线条样式
							color : 'auto'
						}
					},
					splitLine : { // 分隔线
						length : 20, // 属性length控制线长
						lineStyle : { // 属性lineStyle（详见lineStyle）控制线条样式
							color : 'auto'
						}
					},
					pointer : {
						width : 5
					},
					title : {
						show : true,
						offsetCenter : [ 0, '-30%' ], // 属性offsetCenter用于标题定位，数组为横纵相对仪表盘圆心坐标偏移，支持百分比（相对外半径），
						textStyle : { // 其余属性默认使用全局文本样式，详见TEXTSTYLE
							fontWeight : 'bolder',
							fontSize : 20,
							fontStyle : 'italic'
						}
					},
					detail : {
						textStyle : { // 其余属性默认使用全局文本样式，详见TEXTSTYLE
							fontWeight : 'bolder'
						}
					},
					data : [ {
						value : 1.5,
						name : 'JVM(%)'
					} ]
				} ]
	};
	// ////////////////////

	$
			.extend(
					PerformanceTool.prototype,
					{
						initEchart : function(id) {
							return echarts.init($(id)[0]);
						},
						// line chart for cpu mem and jvm
						getSummaryLineOptions : function(result) {
							if (result) {
								var resPerformanceObj = eval('(' + result + ')');
								summaryLineOpts.xAxis[0].data = resPerformanceObj.xaxis[0].data;
								summaryLineOpts.series[0].data = resPerformanceObj.seriesList[0].data;
								summaryLineOpts.series[1].data = resPerformanceObj.seriesList[1].data;
								summaryLineOpts.series[2].data = resPerformanceObj.seriesList[2].data;

								return summaryLineOpts;
							}
						},
						getListQueueLineOpts : function(result) {
							if (result) {
								var resPerformanceObj = eval('(' + result + ')');

								// resPerformanceObj = resPerformanceObj[0];
								// queueLineOpts.xAxis[0].data =
								// resPerformanceObj.xaxis[0].data;
								// queueLineOpts.series[0].data =
								// resPerformanceObj.seriesList[0].data;
								queueLineOpts.series[0].data = resPerformanceObj;
								return queueLineOpts;
							}
						},
						getQueueLineOpts : function(result) {
							if (result) {
								var resPerformanceObj = eval('(' + result + ')');

								resPerformanceObj = resPerformanceObj[0];
								queueLineOpts.xAxis[0].data = resPerformanceObj.xaxis[0].data;
								queueLineOpts.series[0].data = resPerformanceObj.seriesList[0].data;
								return queueLineOpts;
							}
						},

						// heap used and committed line chart
						getHeapLineOptions : function(result) {
							if (result) {
								var resPerformanceObj = eval('(' + result + ')');

								heapOption.xAxis[0].data = resPerformanceObj.xaxis[0].data;
								heapOption.series[0].data = resPerformanceObj.seriesList[3].data;
								heapOption.series[1].data = resPerformanceObj.seriesList[4].data;

								return heapOption;
							}
						},
						getPanelOptions : function(result) {
							if (result) {
								var resPerformanceObj = eval('(' + result + ')');
								var cpuper = resPerformanceObj.lastRecord.CPUPER;
								var memper = resPerformanceObj.lastRecord.MEMPER;
								var jvmper = resPerformanceObj.lastRecord.JVMPER;

								panelOption.series[0].data[0].value = cpuper - 0;
								panelOption.series[1].data[0].value = memper - 0;
								panelOption.series[2].data[0].value = jvmper - 0;

								return panelOption;
							}
						},
						getResError : function(res) {
							console.log("some error occured")
						}

					})
	window.performance = new PerformanceTool();
})(jQuery);
